.dpot-remote { display: flex; flex-direction: column; width: 100%; max-width: 880px; min-height: 100vh; margin: 0 auto; padding: 0; background: var(--bg-page); color: var(--text-primary); font-size: 0.875rem; &__banner { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 8px 16px; text-align: center; font-size: 0.875rem; font-weight: 700; color: #ffffff; letter-spacing: 0.02em; &--paused { background: #dc2626; border-bottom: 1px solid #b91c1c; } &--playing { background: #16a34a; border-bottom: 1px solid #15803d; } } &__header { display: flex; align-items: center; justify-content: space-between; padding: 12px 20px; border-bottom: 1px solid var(--border-default); background: var(--bg-head); color: var(--text-normal); } &__brand { display: flex; align-items: baseline; gap: 6px; } &__brand-logo { font-size: 1.25rem; font-weight: 800; color: #ffffff; letter-spacing: -0.02em; } &__brand-title { font-size: 1rem; font-weight: 600; color: var(--text-normal); } &__header-actions { display: flex; align-items: center; gap: 12px; } &__connection { display: inline-flex; align-items: center; gap: 5px; font-size: 0.75rem; font-weight: 600; padding: 4px 10px; border-radius: 999px; &--on { background: rgba(255, 255, 255, 0.18); color: #d4f5dd; } &--off { background: rgba(255, 255, 255, 0.18); color: #fecaca; } } &__close-btn { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: none; background: transparent; color: var(--text-normal); font-size: 1.25rem; line-height: 1; cursor: pointer; transition: background 0.15s; &:hover { background: var(--bg-subtle); color: var(--text-primary); } } &__sub-controls { display: flex; gap: 6px; padding: 10px 16px; border-bottom: 1px solid var(--border-default); } &__sub-btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 6px; border: 1px solid var(--border-default); border-radius: 8px; background: var(--bg-page); color: var(--text-primary); font-size: 0.75rem; font-weight: 500; cursor: pointer; transition: all 0.15s; &:hover { background: var(--bg-subtle); } &--active { border-color: #3b82f6; background: rgba(59, 130, 246, 0.1); color: #3b82f6; font-weight: 600; } &--off { border-color: #dc2626; background: rgba(220, 38, 38, 0.1); color: #dc2626; font-weight: 600; } } &__test-form { margin: 12px 16px 0; padding: 12px 14px 14px; border: 1px solid var(--border-default); border-radius: 10px; background: var(--bg-subtle); } &__test-form-legend { display: inline-flex; align-items: center; gap: 6px; padding: 0 8px; font-size: 1rem; font-weight: 700; color: var(--text-primary); } &__test-row { display: flex; gap: 8px; margin-bottom: 8px; } &__input, &__select, &__textarea { flex: 1; padding: 8px 10px; border: 1px solid var(--border-default); border-radius: 6px; background: var(--bg-page); color: var(--text-primary); font-size: 0.8125rem; outline: none; transition: border-color 0.15s; &:focus { border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); } &:disabled { background: var(--bg-subtle); color: var(--text-muted); cursor: not-allowed; } } &__input { &--amount { max-width: 140px; text-align: right; } } &__textarea { width: 100%; min-height: 56px; resize: vertical; font-family: inherit; margin-bottom: 8px; } &__test-form-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } &__checkbox { display: flex; align-items: center; gap: 6px; font-size: 0.75rem; color: var(--text-secondary); cursor: pointer; user-select: none; input[type='checkbox'] { width: 16px; height: 16px; cursor: pointer; accent-color: #2a8db3; } } &__test-submit { padding: 8px 18px; border: none; border-radius: 6px; background: #2a8db3; color: #ffffff; font-size: 0.8125rem; font-weight: 600; cursor: pointer; transition: background 0.15s; &:hover:not(:disabled) { background: #1f6f8f; } &:disabled { background: var(--text-muted); cursor: not-allowed; } } &__warn { display: flex; align-items: center; gap: 6px; margin: 8px 0 0; padding: 6px 10px; border-left: 3px solid #dc2626; background: rgba(220, 38, 38, 0.08); color: #dc2626; font-size: 0.75rem; font-weight: 500; } &__tabs { display: flex; gap: 4px; margin: 14px 16px 0; padding: 4px; border-radius: 10px; background: var(--bg-subtle); overflow-x: auto; } &__tab { flex: 1; min-width: 64px; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 6px; border: none; border-radius: 6px; background: transparent; color: var(--text-secondary); font-size: 0.75rem; font-weight: 500; cursor: pointer; transition: all 0.15s; white-space: nowrap; &:hover { background: rgba(0, 0, 0, 0.04); color: var(--text-primary); } &--active { background: var(--bg-page); color: var(--text-primary); font-weight: 700; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); } } &__tab-label { font-size: 0.75rem; } &__tab-count { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 18px; padding: 0 6px; border-radius: 999px; background: var(--text-muted); color: var(--bg-page); font-size: 0.6875rem; font-weight: 700; } &__tab--active &__tab-count { background: #2a8db3; color: #ffffff; } &__list-wrap { flex: 1; display: flex; flex-direction: column; margin: 10px 16px 0; border: 1px solid var(--border-default); border-radius: 10px; overflow: hidden; background: var(--bg-page); min-height: 280px; } &__list-header, &__row { display: grid; grid-template-columns: 1.4fr 1fr 2.2fr 0.7fr 1fr 0.5fr; gap: 8px; padding: 8px 12px; align-items: center; } &__list-header { background: var(--bg-subtle); border-bottom: 1px solid var(--border-default); font-size: 0.75rem; font-weight: 700; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.04em; } &__list { max-height: 360px; overflow-y: auto; } &__col { font-size: 0.8125rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; &--name { display: flex; align-items: center; gap: 6px; font-weight: 600; } &--amount { font-weight: 700; color: var(--color-danger); text-align: right; } &--msg { color: var(--text-secondary); } &--time { color: var(--text-muted); font-variant-numeric: tabular-nums; } &--status { text-align: center; } &--menu { display: flex; align-items: center; justify-content: center; } } &__test-badge { display: inline-flex; align-items: center; padding: 1px 6px; border-radius: 4px; background: #eab308; color: #ffffff; font-size: 0.625rem; font-weight: 800; letter-spacing: 0.04em; } &__row { border-bottom: 1px solid var(--border-default); border-left: 4px solid transparent; transition: background 0.1s; &:last-child { border-bottom: none; } &:hover { background: var(--bg-subtle); } &--queued { border-left-color: #94a3b8; } &--playing { border-left-color: #3b82f6; background: rgba(59, 130, 246, 0.06); } &--delivered { border-left-color: #16a34a; } &--skipped { border-left-color: #eab308; } &--ignored { border-left-color: #64748b; opacity: 0.65; } &--failed { border-left-color: #dc2626; background: rgba(220, 38, 38, 0.04); } } &__status-badge { display: inline-flex; align-items: center; justify-content: center; padding: 2px 8px; border-radius: 999px; font-size: 0.6875rem; font-weight: 700; &--queued { background: rgba(148, 163, 184, 0.18); color: #475569; } &--playing { background: rgba(124, 58, 237, 0.18); color: #7c3aed; padding: 0; } &--delivered { background: rgba(22, 163, 74, 0.18); color: #16a34a; } &--skipped { background: rgba(234, 179, 8, 0.18); color: #ca8a04; } &--ignored { background: rgba(100, 116, 139, 0.18); color: #64748b; } &--failed { background: rgba(220, 38, 38, 0.18); color: #dc2626; } } &__empty { padding: 40px 20px; text-align: center; color: var(--text-muted); font-size: 0.875rem; } &__menu-btn { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border: 1px solid var(--border-default); border-radius: 6px; background: transparent; color: var(--text-primary); font-size: 1rem; line-height: 1; cursor: pointer; transition: background 0.15s; &:hover { background: var(--bg-subtle); } } // reorder ↑/↓ 버튼 (일시정지 시에만 노출) &__col--reorder { display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; width: 32px; flex-shrink: 0; } &__reorder-btn { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 16px; padding: 0; border: 1px solid var(--border-default); border-radius: 4px; background: transparent; color: var(--text-primary); cursor: pointer; transition: background 0.15s, opacity 0.15s; &:hover:not(:disabled) { background: var(--bg-subtle); } &:disabled { opacity: 0.3; cursor: not-allowed; } } &__menu-dropdown { z-index: 9999; min-width: 130px; padding: 4px; border: 1px solid var(--border-default); border-radius: 8px; background: var(--bg-page); box-shadow: 0 6px 16px rgba(0, 0, 0, 0.18); } &__menu-item { display: block; width: 100%; padding: 7px 10px; border: none; border-radius: 4px; background: transparent; color: var(--text-primary); font-size: 0.8125rem; font-weight: 500; text-align: left; cursor: pointer; transition: background 0.1s; &:hover { background: var(--bg-subtle); } &--danger { color: #dc2626; &:hover { background: rgba(220, 38, 38, 0.08); } } } &__main-controls { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; padding: 12px 16px 16px; margin-top: auto; border-top: 1px solid var(--border-default); } &__main-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 8px; border: 1px solid var(--border-default); border-radius: 10px; background: var(--bg-page); color: var(--text-primary); font-size: 0.875rem; font-weight: 700; cursor: pointer; transition: all 0.15s; &:hover:not(:disabled) { background: var(--bg-subtle); } &:disabled { cursor: default; opacity: 0.6; } &--pause { &.dpot-remote__main-btn--active { background: #dc2626; border-color: #b91c1c; color: #ffffff; opacity: 1; } } &--skip { &:hover:not(:disabled) { background: var(--bg-subtle); border-color: #2a8db3; color: #2a8db3; } } &--play { &.dpot-remote__main-btn--active { background: #16a34a; border-color: #15803d; color: #ffffff; opacity: 1; // 재생 중 인디케이터 — Play 아이콘이 우측 슬라이드+페이드 반복 svg { animation: dpot-remote-play-pulse 1.2s ease-in-out infinite; } } } } } @keyframes dpot-remote-play-pulse { 0%, 100% { transform: translateX(0); opacity: 1; } 50% { transform: translateX(4px); opacity: 0.55; } } // ── 타이머 ring (재생 중 카운트다운) ───────────────── .dpot-remote__timer-ring { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; svg { position: absolute; inset: 0; } } .dpot-remote__timer-num { position: relative; font-size: 0.6875rem; font-weight: 700; color: #7c3aed; font-variant-numeric: tabular-nums; } @media (max-width: 767px) { .dpot-remote { max-width: 100%; font-size: 0.8125rem; &__list-header, &__row { grid-template-columns: 1.2fr 0.9fr 1.6fr 0.6fr 0.9fr 0.5fr; gap: 4px; padding: 6px 8px; } &__col { font-size: 0.75rem; } &__test-row { flex-direction: column; } &__input--amount { max-width: 100%; } &__tabs { margin: 10px 12px 0; } &__list-wrap { margin: 8px 12px 0; } &__main-controls { padding: 10px 12px 14px; } } }